home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d883.lha / BBBBS / BBDoors58.lha / rexxDoors / ShoList.rexx < prev    next >
OS/2 REXX Batch file  |  1991-12-06  |  5KB  |  193 lines

  1. /*   ShoList.rexx -  updated for BBBBS.baud - 26 March 1991           */
  2.  
  3. /*      copyright 1989 Richard Lee Stockton and Gramma Software.      */
  4. /*    This code is freely distributable as long as this copyright     */
  5. /*   notice remains, unchanged, at the start of the code. Thank you.  */
  6.  
  7. CR='0D'x
  8. SIGNAL ON BREAK_C
  9. SIGNAL ON BREAK_E
  10.  
  11.  
  12. /* These are the USAGE strings we output if we see a '?', or a bad letter */
  13.  
  14. LF     = '0A'x
  15. USAGE1 = LF"  ARexx USAGE: [ACDFHILMPRSTVWX?]"LF
  16. USAGE2 = ,
  17. " A=directories  C=clip list    D=devices  F=open files     H=handlers"LF||CR,
  18. "I=interrupts   L=libraries    M=memory   P=ports          R=resources"LF||CR,
  19. "S=semaphores   T=ready_tasks  V=volumes  W=waiting_tasks  X=REXX tasks",
  20. LF||CR||LF||CR"                  no argument exits"||CR
  21.  
  22. SAY CR
  23. SAY 'This is your chance to see what is going on inside the Amiga that is'CR
  24. SAY 'running BBBBS. You can stick letters together (lp=libraries & ports).'CR
  25. SAY CR
  26. SAY USAGE2
  27. OPTIONS PROMPT 'ShoList: > '
  28.  
  29. DO FOREVER
  30.   PULL x
  31.  
  32.  
  33. /* if no argument, then exit */
  34.  
  35.   IF length(x)=0 THEN EXIT;
  36.  
  37.  
  38. /* if '?', output USAGE stuff and die */
  39.  
  40.   IF (x=='?') THEN DO
  41.                     SAY USAGE1||CR
  42.                     SAY USAGE2||CR
  43.                     EXIT
  44.                  END
  45.  
  46.  
  47. /* Take each letter in the argument, one at a time */
  48.  
  49.   DO i=1 TO length(x)
  50.     y=substr(x,i,1)
  51.  
  52.  
  53. /* Select an appropriate title for this letter */
  54.  
  55.    SELECT
  56.        WHEN y='A' THEN title = 'Assigned Directories [DOS list]'
  57.        WHEN y='C' THEN title = 'Clips [AREXX list]'
  58.        WHEN y='D' THEN title = 'Device Drivers'
  59.        WHEN y='F' THEN title = 'Open Files [local]'
  60.        WHEN y='H' THEN title = 'Handlers [DOS list]'
  61.        WHEN y='I' THEN title = 'Interrupts'
  62.        WHEN y='L' THEN title = 'Libraries'
  63.        WHEN y='M' THEN title = 'MemoryList Items'
  64.        WHEN y='P' THEN title = 'Ports'
  65.        WHEN y='R' THEN title = 'Resources'
  66.        WHEN y='S' THEN title = 'Semaphores'
  67.        WHEN y='T' THEN title = 'Ready Tasks'
  68.        WHEN y='V' THEN title = 'Volumes [DOS list]'
  69.        WHEN y='W' THEN title = 'Waiting Tasks'
  70.        WHEN y='X' THEN title = 'REXX Tasks'
  71.        OTHERWISE
  72.          DO          /* Bad Letter in argument. Complain and die */
  73.            SAY CR
  74.            SAY '  Usage Error!'  USAGE1 ' --->' y '?'CR
  75.            SAY USAGE2||CR
  76.            EXIT
  77.          END
  78.    END
  79.  
  80.  
  81. /* ARexx scans system lists. This is where the good stuff gets done. */
  82.  
  83.    IF y='X' THEN CALL AStatus()
  84.    ELSE IF((y='C')|(y='F')) THEN list = show(y,,';')
  85.                             ELSE list = showlist(y,,';')
  86.  
  87.  
  88. /* everything below is just formatting and printing the list to the CLI */
  89. /* based on the longest name in the list, and the number of list items. */
  90.  
  91.    listlength=length(list)    /* length in characters of the whole list */
  92.    longest=0
  93.    j=1
  94.    items=0
  95.    position=1
  96.  
  97.    DO WHILE(position>0)      /* how many total and how long is longest? */
  98.        position=pos(';',list,j) /* <-- returns 0 when the list runs out */
  99.        IF((position-j)>longest) THEN longest=position-j
  100.        IF(position>0) THEN j=position+1
  101.        items=items+1
  102.    END
  103.    IF((listlength+1-j)>longest) THEN longest=listlength+1-j /* last item */
  104.  
  105.    columns = 77%(longest+2)           /* we assume an 80 column display */
  106.    position=1
  107.    count=0
  108.    j=1
  109.    line = ""
  110.    IF(listlength==0) THEN items=0
  111.    SAY '      -*-*-*-' items title  '-*-*-*-'CR
  112.    IF(listlength==0) THEN ITERATE         /* no list, go to next letter */
  113.    DO WHILE(position>0)
  114.        position=pos(';',list,j)
  115.        IF(position>0) THEN
  116.          DO
  117.            nextItem = ""
  118.            nextItem = left(substr(list,j,position-j),longest)
  119.            IF LENGTH(STRIP(nextItem))==0 THEN
  120.              nextItem = left("<blank>",longest)
  121.            line = line || nextItem || '  '
  122.            j = position + 1
  123.          END
  124.        ELSE line = line || left(substr(list,j),longest)
  125.        count = count + 1
  126.        IF(count=columns) THEN
  127.          DO
  128.            SAY line||CR
  129.            count=0
  130.            line=""
  131.          END
  132.    END
  133.    IF(count>0) THEN SAY line||CR        /* Only print when the line is full */
  134.   END
  135. END
  136. EXIT
  137.  
  138. /* AStatus.rexx   ARexx task list display   by BaudMan */
  139.  
  140. AStatus:
  141. RxsBase = findlib("rexxsyslib.library")
  142. Call RxsOffsets()
  143. TaskList = import(offset(RxsBase,RxsBase.rl_TaskList),4)
  144. n=1
  145. list=""
  146. do j=1 TO 999 WHILE( import(TaskList,4) ~= NULL())
  147.     name=Import(Import(Offset(TaskList,56),4)) 
  148.     if name='' then do
  149.         name='String_'n
  150.         n=n+1
  151.     end
  152.     IF j=1 THEN list=name
  153.     ELSE list=list';'name
  154.     TaskList = import(TaskList,4)
  155. END
  156. RETURN;
  157.  
  158.  
  159. /* Find a given library in the system - copied from Status.rexx */
  160. findlib:
  161.     parse arg tofind
  162.     execbase = import('00000004'x,4)
  163.     nodebase = import(offset(execbase, 378), 4)
  164.  
  165.     do while(import(nodebase,4) ~== NULL())
  166.         if import(import(offset(nodebase,10),4)) == tofind then
  167.             return nodebase
  168.         nodebase = import(nodebase,4)
  169.     end
  170.  
  171.     say 'Could not find' tofind||CR
  172.     exit(20)
  173.  
  174.  
  175. RxsOffsets:
  176. RxsBase.rl_TaskList =168/* List     */
  177. RxsBase.rl_NumTask  =182    /* WORD     */
  178. RxsBase.rl_LibList  =184    /* List     */
  179. RxsBase.rl_NumLib   =198    /* WORD     */
  180. RxsBase.rl_ClipList =200    /* List     */
  181. RxsBase.rl_NumClip  =214    /* WORD     */
  182. RxsBase.rl_MsgList  =216    /* List     */
  183. RxsBase.rl_NumMsg   =230    /* WORD     */
  184. RETURN;
  185.  
  186.  
  187. BREAK_C:
  188. BREAK_E:
  189. EXIT;
  190.  
  191.  
  192. /* end of ShoList.rexx for BBBBS  |   3 February 1991 */
  193.